#ifndef RETRY_SCHEDULER_H
#define RETRY_SCHEDULER_H

#include "abstract_scheduler.h"

namespace scheduler
{
/**
 * @brief:  重试，直到以下条件完成其中一个：
 * 1、成功
 * 2、执行>=重试次数
 *
 * @note:   retry次数如果不设置，则默认执行1次，次此时，该策略无任何作用
 * @author: sherlock_lht
 */
class RetryScheduler: public AbstractScheduler
{
public:
    explicit RetryScheduler(const std::string &name);
    explicit RetryScheduler(const std::string &name, int retry_count);
    ~RetryScheduler() override;

    /**
     * @brief:  设置/获取重试次数
     * @author: sherlock_lht
     */
    void setRetryCount(int32_t count);
    int32_t getRetryCount() const;

    [[deprecated("retry scheduler cannot add task")]] bool appendTask(const task::AbstractTaskConstPtr &task) final;

    [[deprecated("retry scheduler cannot add scheduler")]] bool appendScheduler(const AbstractSchedulerConstPtr &scheduler) final;
};
}

#endif //RETRY_SCHEDULER_H
